home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / swtools / trubasic / rolldemos / demos / tb / hanoi.tru < prev    next >
Encoding:
Text File  |  1994-08-02  |  2.2 KB  |  94 lines

  1. ! Towers of Hanoi
  2. !
  3. ! Version 2.0 copyright (c) 1988 by True BASIC, Inc.
  4. !
  5. CALL tw_wset_title(0,"Hanoi")
  6. CALL tw_wset_size(0,750,750)
  7.  
  8. LET disks = 6
  9. CALL setup(disks,1)
  10. CALL hanoi(disks,1,2,3)
  11. CALL ending
  12. get point x,y
  13. END
  14.  
  15. MODULE Hanoi
  16.  
  17.     SHARE #1, top(3)
  18.  
  19.     SUB setup(n,a)                ! n disks, on tower a
  20.         OPEN #1: screen .1875,.8125,.2,.8
  21.         SET WINDOW 0,4,0,n+2
  22.         SET back 5
  23.         SET TEXT justify "center","base"
  24.         PLOT TEXT, AT 2,n+2.5: "The Towers of Hanoi"
  25.         SET COLOR 2
  26.         BOX AREA 0,4,0,1
  27.         SET COLOR 0
  28.         PLOT 0,1;4,1
  29.         SET COLOR 3
  30.         FOR i = 1 to 3
  31.             BOX AREA i-.02,i+.02,1,n+1
  32.         NEXT i
  33.         FOR j = n to 1 step -1
  34.             CALL disk(a,n+1-j,j,1)
  35.         NEXT j
  36.         LET top(1) = n
  37.     END SUB
  38.  
  39.     SUB hanoi(n,a,b,c)            ! Recursive routine
  40.     get mouse x,y,state
  41.     if state<>0 or key input then stop
  42.         IF n > 0 then
  43.            CALL hanoi(n-1,a,c,b)
  44.            CALL move(n,a,b)
  45.        pause .5
  46.        get mouse x,y,state
  47.        if state<>0 or key input then stop
  48.            CALL hanoi(n-1,c,b,a)
  49.         END IF
  50.     END SUB
  51.  
  52.     SUB move(s,a,b)
  53.         CALL disk(a,top(a),s,0)   ! Erase
  54.         LET top(a) = top(a) - 1
  55.         LET top(b) = top(b) + 1
  56.         CALL disk(b,top(b),s,1)   ! Draw
  57.     END SUB
  58.  
  59.     SUB disk(t,h,s,c)             ! Tower no., height, size, color
  60.         LET x1 = t - (s+1)/15
  61.         LET x2 = t + (s+1)/15
  62.         LET y1 = h
  63.         LET y2 = h + 1
  64.         SET COLOR c
  65.         BOX AREA x1,x2,y1,y2
  66.         IF c = 0 then             ! If erasing, replace the tower
  67.            SET COLOR 3
  68.            BOX AREA t-.02,t+.02,y1,y2
  69.         ELSE
  70.            SET COLOR 0            ! Make an empty border
  71.            BOX LINES x1,x2,y1,y2
  72.         END IF
  73.         PAUSE .2
  74.     END SUB
  75.  
  76.     SUB ending
  77.         SET COLOR 2
  78.         PLOT TEXT, AT 2,-1.5: "N I R V A N A"
  79.         ASK MAX COLOR mc
  80.         IF mc<15 then
  81.            FOR i = 1 to 49
  82.                SET back 32*rnd
  83.                PAUSE .05
  84.            NEXT i
  85.         ELSE
  86.            FOR i = 1 to 30
  87.                SET COLOR MIX(0) Max(.5,rnd),Max(.5,rnd),Max(.5,rnd)
  88.                PAUSE .05
  89.            NEXT i
  90.         END IF
  91.     END SUB
  92.  
  93. END MODULE
  94.